package composite;

import lombok.AllArgsConstructor;
import lombok.Data;

/**
 * 组件
 * @author DFD
 * @date 2023年11月17日
 */
@Data
@AllArgsConstructor
public abstract class OrganizationComponent {
	private String name; // 名字
	private String desc; // 说明

	// 在OrganizationComponent抽象类中定义的add和remove方法默认实现是抛出UnsupportedOperationException异常。是为了继承类无需都需要实现add或remove方法，例如，一个没有子组织的部门就无需实现这些方法。
	// 但是，如果某个继承OrganizationComponent的类（比如一个可以有子组织的部门类）需要实现add或remove方法，那么该类就需要重写这两个方法，提供其具体的实现。这样，当调用这个子类的add或remove方法时，就会执行子类重写后的方法，而不是父类中的默认实现，因此就不会抛出UnsupportedOperationException异常。
	protected void add(OrganizationComponent organizationComponent) {
		// 默认实现
		throw new UnsupportedOperationException();
	}

	protected void remove(OrganizationComponent organizationComponent) {
		// 默认实现
		throw new UnsupportedOperationException();
	}

	// 方法print, 做成抽象的, 子类都需要实现
	protected abstract void print();
}
